home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctjag86.arc
/
PDISKIO.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-05-10
|
5KB
|
111 lines
NAME PDISKIO
PAGE 60,132
;****************************************************************;
; ;
; PHYSICAL DISK I/O ;
; ;
;****************************************************************;
_TEXT SEGMENT BYTE PUBLIC 'CODE'
_TEXT ENDS
CONST SEGMENT WORD PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
DGROUP GROUP CONST, _BSS, _DATA
ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
_TEXT SEGMENT
;****************************************************************;
; ;
; char ;
; disk_io(cmd, drive, buf, count, sector, head, cylinder) ;
; 4 6 8 10 12 14 16 ;
;****************************************************************;
PUBLIC _DISK_IO
_DISK_IO PROC NEAR
PUSH BP ; SAVE FRAME
MOV BP, SP ; MAKE NEW FRAME
PUSH ES ;
PUSH SI ;
PUSH DI ;
MOV AH, [BP+4] ; PICK UP COMMAND
MOV DL, [BP+6] ; PICK UP DRIVE
MOV BX, [BP+8] ; PICK UP BUFFER
PUSH DS ;
POP ES ;
MOV AL, [BP+10] ; PICK UP COUNT
MOV DH, [BP+14] ; PICK UP HEAD
MOV CH, [BP+17] ; HIGH CYL BITS
SHR CX, 1 ; SHF 2 MSB TO CL
SHR CX, 1 ;
AND CL, 0C0H ; MASK THEM
ADD CL, [BP+12] ; ADD IN SECTOR
INC CL ; PLUS ONE
MOV CH, [BP+16] ; REST CYL IN CH
INT 13H ; CALL BIOS
JC SAVERR ; JUMP IF ERROR
MOV AH, 0 ; CLEAR RESULT
CMP BYTE PTR [BP+4], 8 ; DRIVE PARAM CMD
JNE SAVERR ; JUMP IF NOT
MOV BX, [BP+8] ; RESULTS IN BUF
MOV [BX], CL ; SECTORS
AND BYTE PTR [BX], 03FH ;
MOV BYTE PTR [BX+1], 0 ;
INC DH ;
MOV [BX+2], DH ; HEADS
MOV BYTE PTR [BX+3], 0 ;
MOV [BX+4], CH ; CYLINDERS
SHL CX, 1 ; FIX HIGH BYTE
SHL CX, 1 ;
AND CH, 003H ;
MOV [BX+5], CH ;
MOV [BX+6], DL ; DRIVES
MOV BYTE PTR [BX+7], 0 ;
SAVERR: MOV AL, AH ; RESULT IN AX
MOV AH, 0 ;
POP DI ; RESTORE REGS
POP SI ;
POP ES ;
POP BP ; RESTORE FRAME
RET ; RETURN
_DISK_IO ENDP
;****************************************************************;
; ;
; Get the current BIOS clock tick count ;
; ;
; long ticks(); ;
; ;
;****************************************************************;
PUBLIC _TICK
_TICK PROC NEAR
PUSH BP ; SAVE FRAME
MOV BP, SP ; MAKE NEW FRAME
PUSH ES ;
MOV AX, 0 ; CLEAR ES TO
MOV ES, AX ; GET BIOS DATA
CLI ; DISABLE INTS
MOV AX, ES:WORD PTR [046CH] ; LOW TICK COUNT
MOV DX, ES:WORD PTR [046EH] ; HIGH TICK COUNT
STI ; ENABLE INTS
POP ES ; RESTORE REGS
POP BP ; RESTORE FRAME
RET ; RETURN
_TICK ENDP
;****************************************************************;
_TEXT ENDS
END